草庐IT

MySQL IF THEN 在 WHERE 子句中

全部标签

mysql - 如何优化 MySQL 查询以便 WHERE 子句中的选定值仅计算一次?

我需要以高效的方式从我的表中随机选择10行。我发现以下内容效果很好(在查询之后,我只是从查询中获得的10到30个随机元素中选择10个PHP):SELECT*FROMproductWHERERAND()然而,子查询虽然相对便宜,但它是为表中的每一行计算的。我怎样才能防止这种情况发生?带变量?加入?谢谢! 最佳答案 一个变量就可以做到。像这样:SELECT@myvar:=(SELECT20/COUNT(*)FROMproduct);SELECT*FROMproductWHERERAND()或者,来自MySqlmathfunctionsd

MYSQL 子查询 COUNT WHERE

我正在尝试创建一个SQL查询,该查询根据从表单发送的选项而变化。在此,我想尝试分享主WHERE子句语句与WHERE子句对子查询的影响。以pass_count为例,我想统计total_passfail="Pass"的行数。然而,由于主要查询WHERE函数的含义,这个数字可能会发生变化(在主要WHERE函数中,我有8个可能的选项,例如日期跨度、用户、团队、部门,它们相应地塑造了整体数据)。有什么方法可以使整个WHERE子句影响子查询,而不是我必须向每个子查询再添加8个WHERE。实际上,我只希望子查询WHERE子句作用于主查询返回的数据集之上。如有任何帮助,我们将不胜感激。$query=$

mysql - 避免重新计算列列表中已计算的 WHERE 语句中的值

我真的很希望不必在我的WHERE语句中重新计算列列表中已经计算过的值。例如,我必须这样做:SELECTalbumId,fnAlbumGetNumberOfPhotos(album.albumId)ASalbumPhotoCountFROMalbumWHEREalbumIsActive=1ANDfnAlbumGetNumberOfPhotos(album.albumId)>0但想知道为什么我不能这样做,或者是否有任何其他不需要再次调用该函数的解决方法:SELECTalbumId,fnAlbumGetNumberOfPhotos(album.albumId)ASalbumPhotoCoun

mysql - SQL 查询 : WHERE clause

我的表格rating具有以下结构:RATING(INT'id',INT'stars')主键'id';众所周知,stars的值只能从1到5。下面是我的表格的一些可能的内容:示例表1:IDStars-------15243444556474示例表2:IDStars-------112233425161718291我正在使用以下查询查询我的表:SELECTstars,count(stars)ascountFROMratingGROUPBYstarsORDERBYstarsdesc;示例Table1输出:starscount----------5245示例Table2输出:starscount

mysql - 关系代数中 GroupBy 和 Having 子句的等价物

我正在做一项作业,我必须将SQL查询转换为关系代数查询。我在转换groupby子句时遇到了困难。谁能告诉我groupby子句如何用关系代数写成?例如:SELECTjob,salFROMempGROUPBYjob;谢谢! 最佳答案 注意你想得到薪水的总和,在TutorialD:SUMMARIZEempBY{job}ADD(SUM(sal)AStotal_sal)注意聚合不是关系运算符,因此不会构成关系代数的一部分。至于HAVING,是不是历史异常。在SQL-92标准之前,不可能在FROM子句(又名派生表)中编写SELECT表达式,即您

mysql - "WHERE ... IN ...", "WHERE ... != ..."查询索引问题

我正在使用MySQl数据库。我知道如果我为列创建一个索引,使用该列索引从表中查询数据会很快。但是,我还有以下问题:(假设我有一个名为cars的表,有一个名为country的列,并且我为country列创建了索引)例如,我知道查询SELECT*FROMcarsWHEREcountry='japan'将使用country列上的索引来快速查询数据。!=操作怎么样?SELECT*FROMcarsWHEREcountry!='japan';也会使用索引来查询数据吗?WHERE...IN...操作是否使用索引查询数据?例如SELECT*FROMcarsWHEREcountryIN('japan',

如果在 ON 子句中使用 OR,则 MySQL 不会在 JOIN 中使用可用索引

假设您有5个表,每个表都有自己的列:房子(id,名字,street_id)街道(id,名字)照片(身份证、姓名)house_photo(house_id,photo_id)street_photo(street_id,photo_id)并说所有“id”列和以“_id”结尾的列都已经有了索引。(实际上我的查询与房屋或街道无关。它们是为了争论。)现在假设您希望将每条街道放入一列中,如果该街道或其房屋有照片,您希望下一列中的照片...这里的棘手之处在于所有房屋都在一张表中。以及另一张表中的所有照片。但是要链接2,我们需要访问所有五个表。我提出了以下查询,其中包含4个JOIN:SELECTst

MySQL 存储过程 : IF in WHERE

我正在尝试以下列方式选择一些数据:SELECTcolumnFROMtableWHEREa=a1AND(b=b1ORb=b2ORb=b3);我想让它做的是如果b不等于b1,检查是否b=b2。但是,如果b=b1,则不检查其他条件。此select语句的结果必须只有一个条目。但是,在Ihaveno语句中,它会检查所有三个条件,有时会返回多行。同样,我希望它停止检查条件是否为真。关于如何实现的任何想法?我试过case但没有成功...提前致谢!编辑这是我尝试运行的实际查询。INSERTINTOshipment_flights(airlinename,flt_no,flt_date,destinat

php - 在mysql中用where子句添加时间差

我有一个包含数十万行的数据表,这些行代表对服务器获取数据的请求。每条记录都有时间戳、服务器ID和服务器是否正确响应的二进制值(tinyint)。查询时间不是常数。我试图通过将服务器在线的查询之间的时间相加(非常优选mysql查询)来获得服务器被视为“在线”的总时间。例如。server|time|status1|1/1/201211:00online1|1/1/201211:02online1|1/1/201211:05offline2|1/1/201211:10online1|1/1/201211:30onlineTimenow:11:40Server1OnlineTime=2+3+1

MySql Select 查询返回记录,当 WHERE 条件不为真时

MySQL查询返回一条记录,即使条件不满足也是如此。SELECT*FROM`orders`WHEREorder_id='10000R'没有符合此处给出的WHERE条件的记录。但是MySQl返回一条order_id=10000的记录看起来WHERE条件忽略了引号内的alpha。如果查询有任何错误或者这是MySql错误,请帮助我 最佳答案 我假设order_id是一个int,并且MySql正在隐式转换varchar'10000R'以匹配数据类型列的尾部'r'。请参阅MySql文档中的“TypeConversioninExpression